package com.wxxymaker.service;

import com.wxxymaker.model.entity.Shop;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort;

import java.util.List;
import java.util.Map;

public interface ShopService extends BaseService<Shop> {

    /**
     * 根据name模糊查询
     */
    Shop getByName(String name);

    /**
     * 分页查询，根据总评倒序
     * 比下面的查询多一个指定id组的筛选条件
     */
    Page<Shop> page(Integer pageNo, Integer size, Integer[] ids, Integer... types);

    /*
     * 分页查询，根据总评倒序
     * @param pageNo 第几页
     * @param size   每页条数
     * @param types  可变参数 规定的类型条件, 使用in语句，只要是在这个类型中的都被查询
     *               为空时查询所有
     */
    Page<Shop> page(Integer pageNo, Integer size, Integer... types);


    Page<Shop> page(Integer pageNo);

    /**
     * 获取最好的公司
     * @param type 公司类型，可变参数 规定的类型条件, 使用in语句，只要是在这个类型中的都被查询
     *             为空时查询所有
     */
    Shop getBest(Integer... type);

    /**
     * 获取所有公司
     */
    List<Shop> findAll();

    /**
     * 获取所有公司 规定排序方式
     */
    List<Shop> findAll(Sort sort);

    /**
     * 根据id数组获取一组公司
     * @param ids  id数组
     * @return 公司列表
     */
    List<Shop> findByIds(Integer... ids);

    /**
     * 根据公司类型获取所有公司
     * @param types 一个或多个类型
     * @return 所有符合条件的公司
     */
    List<Shop> findByType(Integer... types);

    /**
     * 通过排除类型获取公司
     * @param types  不包括的类型 not in
     * @return 所有符合条件的公司
     */
    List<Shop> findByNoType(Integer... types);

    /**
     * 为公司设置总评和记录本阶段的总评
     * @param  shop 包涵shopId的完整公司信息对象，shopPrevTotal必须设置为当前阶段的
     * @param nowTotal 当前阶段的总评
     * @param stageTotal 所有阶段的总计分数
     */
    void setTotalAndPrev(Shop shop, double nowTotal, double stageTotal);
}
